I wrote this guide initially for the Hetzner community. Posting here for posterity. Leave a comment if any of this doesn’t make sense. I’ll be more than happy to help.
Trilium Notes is a hierarchical note taking application with focus on building large personal knowledge bases. See the Trilium Github page for more details. In this tutorial we will deploy a Trilium instance to install this open source and self-hosted alternative to Evernote on a fresh Debian server.
Prerequisites
To get this running you would need
- A server with Docker and Docker-compose installed. There’s an easy step-by-step tutorial that you could follow.
- A domain pointing to the IP address of your server instance. The tutorial assumes you have pointed the domain
notes.example.com
to your server IP address.
Step 1 – Setup Docker network and our work folder
For ease of deployment and maintenance, we will use Docker in swarm mode. For security certificates and application mapping we will use Traefik as a reverse proxy. It’s perfectly fine if you’ve not used these services before. All necessary steps to get them working are outlined in detail below.
- Initialise the docker swarm:
sudo docker swarm init
- Setup a network for the Traefik container:
sudo docker network create --driver=overlay traefik-net
- Create a directory where we will save all our stack yml files and navigate to that directory:
mkdir stacks && cd stacks
Step 2 – Create the yml files
Step 2.1 – Create the yml file for Traefik
- Create a yml file for traefik:
nano traefik-ssl.yml
- Copy over the following contents into the yml file:
version: "3.7"
services:
traefik:
image: traefik:${VERSION:-v1.7.24-alpine}
ports:
- { target: 80, published: 80, mode: host, protocol: tcp }
- { target: 443, published: 443, mode: host, protocol: tcp }
command:
# - --debug
# - --loglevel=INFO
- --entryPoints=Name:http Address::80 Compress:true Redirect.EntryPoint:https
- --entryPoints=Name:https Address::443 Compress:true TLS
- --defaultEntryPoints=https,http
- --providers.docker.endpoint=tcp://socket-proxy:2375
- --docker.swarmmode=true
- --docker.exposedbydefault=false
- --docker.network=traefik-net
- --metrics.prometheus=true
- --consul
- --consul.endpoint=consul:8500
- --consul.prefix=traefik
- --acme
- --acme.onHostRule=true
- --acme.storage=traefik/acme/account
- --acme.acmeLogging=true
- --acme.entryPoint=https
- --acme.httpChallenge.entryPoint=http
# - --update email
- --acme.email=${ACME_EMAIL:-noreply@example.com}
- --api
deploy:
mode: ${MODE:-replicated}
placement:
constraints: [node.role==manager]
networks:
- internal
- traefik
socket-proxy:
image: tecnativa/docker-socket-proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
CONTAINERS: 1
networks:
- internal
- traefik
consul:
image: consul:1.7.2
command: agent -server -bootstrap-expect=1 -client=0.0.0.0
environment:
CONSUL_BIND_INTERFACE: eth0
CONSUL_CLIENT_INTERFACE: eth0
CONSUL_LOCAL_CONFIG: '{ "limits": { "txn_max_req_len": 2048000, "kv_max_value_size": 2048000 } }'
volumes:
- ${VOLUME_PATH}consul:/consul/data
networks:
- traefik
- internal
volumes:
consul:
networks:
internal:
driver: overlay
attachable: true
traefik:
external: true
name: traefik-net
Step 2.2 – Create the yml file for Trilium
- Create a yml file for trilium:
nano trilium.yml
- Copy over the following contents into the yml file:
version: '3.7'
services:
web:
image: zadam/trilium:0.46.7
volumes:
- ${VOLUME_PATH}trilium-data:/root/trilium-data
deploy:
labels:
- traefik.port=8080
- traefik.enable=true
- traefik.frontend.rule=Host:${DOMAIN:-notes.localhost}
networks:
- traefik
volumes:
trilium-data:
networks:
traefik:
external: true
name: traefik-net
Step 3 – Deploy the stacks
- Deploy the Traefik stack:
sudo docker stack deploy -c traefik-ssl.yml traefik
- Deploy the Trilium stack:
DOMAIN=notes.example.com SCHEME=https docker stack deploy -c trilium.yml trilium
Give the system a few minutes to fetch the docker images and setup and run the containers in the background. To check the status of the containers you can run the command: docker ps -a
Step 4 – Finish the setup in your browser
- Navigate to
notes.example.com
in your browser. You should now be presented with the following options as shown in the image below:
- Select the first option and click ‘Next’
- Create a user account for your Trilium Notes instance in the next screen and you should be all set now!
Conclusion
With a few simple steps we were able to setup and run a good alternative to Evernote. You can even import your notes from Evernote if you’d like.
Go ahead and explore your new setup! The Wiki is also very informative for what you can do next.
Do you provide or know how I can find assistance, for optimizing my usage of Trilium Notes? Specifically, I can’t figure how to best use Day Notes, Weight Tracker, and Tasks. For one, I am not a programmer, coder, or developer. For two, I am a recent Linux Newbie. That said I did set up a manual version of the server link to my domain and syncing to the laptop version. So, with the proper help, I can probably pick it up if you point me to books or online course that can help with scripting I believe it is called.
Did you get a chance to review the wiki page under the advanced showcase? The demo document that comes shipped with the server installation shows you which ‘attributes’ you need to have on the ‘root’ folder for the functionality to kick in. To use the features as such, you do not need any scripting knowledge. Does that help?
Hello. Thanks for writing about your use of Traefik! We’d like to send you some swag as a token of thanks. If you’d like that, please fill out this form: https://traefik.io/submit-my-contribution/ Thanks!
Comments are closed.
To respond to old posts or to get in touch, please reach out via micro.blog, mastodon or pixelfed.
Mentions